package com.lxw.mvpframe.ui.activity

import android.annotation.SuppressLint
import android.app.Activity
import android.os.Bundle
import android.widget.Toast
import com.lxw.mvpframe.presenter.BasePresenter
import com.lxw.mvpframe.ui.view.IBaseView

/**
 * 猿代码： Lxw
 * Email: China2021@126.com
 * 时间轴： 2018年 03月 08 日 下午4:58
 */
@SuppressLint("Registered")
abstract class BaseActivity<V, T : BasePresenter<V>> : Activity(), IBaseView {

    protected var mPresenter: T? = null

    /**
     * [msg]：具体的提示信息。
     *
     * 最基本的实现了[Toast]的显示，也可以根据自己使用的框架进行提示。
     */
    override fun showToastMessage(msg: String) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
    }

    /**
     * 基类做基本操作。
     */
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(contentId())
        initPresenter()
    }


    /**
     * 子类提供自己的布局ID
     */
    abstract fun contentId(): Int

    /**
     * 考虑到初始化控件，可以使用注入框架该类就没有抽象了，提供了空实现，如果不使用框架初始化可以覆盖该方法。
     */
    open fun initView() {}


    /**
     * 基类对View 和 presenter 进行绑定
     */
    private fun initPresenter() {
        mPresenter = createPresenter()
        mPresenter?.attactView(this as V)
    }

    /**
     * 子类负责实现具体的[BasePresenter]并交由父类统一进行绑定。
     */
    abstract fun createPresenter(): T
}